﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using BasicEncrypt_DecryptFiles.Code;
using Business;
using DataTransferObjects;

namespace GraphicUserInterface.MainForm.Encrypt_Decrypt
{
    public partial class frEncryptData : Form
    {
        string extEncrypted = ".ect";
        int iUserID;

        public frEncryptData(int iUserID)
        {
            InitializeComponent();
            this.iUserID = iUserID;
        }

        private void btBack_Click(object sender, EventArgs e)
        {
            this.Owner.Show();
            this.Close();
        }

        private void btBrowseInput_Click(object sender, EventArgs e)
        {
            OpenFileDialog InputDialog = new OpenFileDialog();
            InputDialog.Filter = "Tất cả tập tin (*.*)|*.*";
            InputDialog.InitialDirectory = Application.StartupPath;
            InputDialog.Title = "Chọn tập tin để mã hóa";

            InputDialog.CheckFileExists = true;

            InputDialog.CheckPathExists = true;

            if (InputDialog.ShowDialog() == DialogResult.OK)
            {
                tbInput.Text = InputDialog.FileName;
                tbOutput.Text = tbInput.Text + extEncrypted;
            }
        }

        private void btBrowseOutput_Click(object sender, EventArgs e)
        {
            OpenFileDialog outputDialog = new OpenFileDialog();
            outputDialog.Filter = "Tất cả tập tin (*.*)|*.*";
            outputDialog.InitialDirectory = Application.StartupPath;
            outputDialog.Title = "Chọn đường dẫn lưu tập tin mã hóa";

            outputDialog.CheckFileExists = true;

            outputDialog.CheckPathExists = true;

            if (outputDialog.ShowDialog() == DialogResult.OK)
            {
                tbOutput.Text = outputDialog.FileName;
            }
        }

        private void tbInput_Leave(object sender, EventArgs e)
        {
            if (tbInput.Text == "")
                return;
            tbOutput.Clear();

            tbOutput.Text = tbInput.Text + extEncrypted;
        }

        private bool IsInforValid()
        {
            bool bIsValid = true;
            string strMessages = "";

            if (tbInput.Text.Equals(""))
            {
                strMessages = strMessages + "Vui lòng chọn tập tin cần mã hóa.\n";
                bIsValid = false;
            }

            if (tbOutput.Text.Equals(""))
            {
                strMessages = strMessages + "Vui lòng chọn nơi lưu trữ tập tin kết quả.\n";
                bIsValid = false;
            }

            if (strMessages.Length != 0)
                MessageBox.Show(strMessages);

            return bIsValid;
            
        }

        private void btEncrypt_Click(object sender, EventArgs e)
        {
            if (!IsInforValid())
                return;

            String strInputName = tbInput.Text;
            String strOutputName = tbOutput.Text;
            EncryptDecryptBUS encryptBUS = new EncryptDecryptBUS();
            switch (encryptBUS.encryptFile(this.iUserID, gvEmailName.SelectedColumns.ToString(), cbAlgorithm.SelectedIndex, cbModes.SelectedIndex,
                cbPadding.SelectedIndex, tbInput.Text, tbOutput.Text))
            {
                case 1:
                    MessageBox.Show("Không hỗ trợ operation mode. Vui lòng chọn thuật toán giải mã khác");
                    break;
                case 2:
                    MessageBox.Show("Lỗi trong việc mở tập tin đầu vào hoặc tạo tập tin mới. Quá trình mã hóa thất bại!!!");
                    break;
                case 3:
                    MessageBox.Show("Mã hóa tập tin thành công.");
                    break;
            }
        }

        private void frEncryptData_Load(object sender, EventArgs e)
        {
            AccountInforDTO[] accountsInfor = AccountBUS.getAccsInforFromDB();

            int i = 0;
            foreach (AccountInforDTO account in accountsInfor)
            {
                this.gvEmailName.Rows.Add((Object)accountsInfor[i].email, (Object)accountsInfor[i].strName);
                ++i;
            }
                        
            this.gvEmailName.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
            this.cbAlgorithm.SelectedIndex = 0;
            this.cbModes.SelectedIndex = 0;
            this.cbPadding.SelectedIndex = 0;
            
        }
    }
}
